package com.zhw.mallshop.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 网关提供 API 全托管服务，丰富的 API 管理功能，辅助企业管理大规模的 API，以降低管理
 * 成本和安全风险，包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。
 * Spring Cloud Gateway 旨在提供一种简单而有效的方式来对 API 进行路由，并为他们提供切
 * 面，例如：安全性，监控/指标 和弹性等。
 * 官方文档地址：
 * https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.3.RELEASE/single/spring-clo
 * ud-gateway.html
 *
 * Spring Cloud Gateway 特点:
 *  基于 Spring5，支持响应式编程和 SpringBoot2.0
 *  支持使用任何请求属性进行路由匹配
 *  特定于路由的断言和过滤器
 *  集成 Hystrix 进行断路保护
 *  集成服务发现功能
 *  易于编写 Predicates 和 Filters
 *  支持请求速率限制
 *  支持路径重写
 *
 * 路由。路由是网关最基础的部分，路由信息有一个 ID、一个目的 URL、一组断言和一组
 * Filter 组成。如果断言路由为真，则说明请求的 URL 和配置匹配
 *  断言。Java8 中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring5.0 框
 * 架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配
 * 来自于 http request 中的任何信息，比如请求头和参数等。
 *  过滤器。一个标准的 Spring webFilter。Spring cloud gateway 中的 filter 分为两种类型的
 * Filter，分别是 Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改
 * 处理
 *日志：
 * https://www.jianshu.com/p/fde1e7f72aa6
 */
/**
 * 1、开启服务注册发现
 *  (配置nacos的注册中心地址)
 * 2、编写网关配置文件
 */

@EnableDiscoveryClient
//原因是引用了common模块, 而该模块是有mybatis的配置的, 启动的时候,就会去找数据源相关的配置. 而网关是不需要数据源的. 因此可以在启动类中,把数据源自动配置类去除.
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MallGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(MallGatewayApplication.class, args);
    }

}
